#include "const.h"

void v_set(var_t v, const char *value) {
	if (v->flags&VAR_CONST_BIT && v->expanded)
		return;

	//
	//	NOTE
	//	Symlink handled here to allow "const" on just a symlink, but not the
	//	root variable.
	//
	if (v->flags&VAR_SYMLINK_BIT) {
		if (v->array.ptrvar==v->value.symlink)
			v_set_array(v->array.ptrvar, v->array.i, value);
		else
			v_set(v->value.symlink, value);
		return;
	}

	if (v->flags&VAR_ARRAY_BIT) {
		v_array_empty(v);
		v_array_explode(v, value);
		return;
	}

	if (v->value.text)
		i_delete((void *)v->value.text);

	v->value.text = value ? i_strdup(value) : (char *)0;

	if (v->expanded) {
		i_delete((void *)v->expanded);
		v->expanded = (char *)0;
	}
}
